<?php

require_once 'classes/Loge.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des Loges
 * 
 * @author Manixab Billy
 */

class SCloge {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajoute une Loge
     * @param uneLoge une loge à ajouter
     * @return Message
     */
    public function ajouter($uneLoge) {
        try {
            
            $query =  $this->db->prepare("INSERT INTO loge " .
                   "(nom, estInterieure, batiment_nom) VALUES(:nom, :estInterieure, :batiment_nom)");

            $query->execute(array(
                    'nom'              => $uneLoge->getNom(),
                    'estInterieure'    => $uneLoge->getEstInterieure(),
                    'batiment_nom'     => $uneLoge->getBatiment_nom()
               ));
            

        }
        catch(PDOException $e) {
           return new Message("Loge non ajouté: ".$e->getMessage());
        }
        return $uneLoge;
    }
    
    /**
     * Methode permettant de modifier une loge
     * @param uneLoge Loge à modifier
     * @return Message  
     */
    public function modifier($uneLogeAModifier) {
        try {
            $query = "UPDATE loge SET  
                estInterieure = '".$uneLogeAModifier->getEstInterieure()."'
                WHERE nom='".$uneLogeAModifier->getNom()."' AND batiment_nom = '".$uneLogeAModifier->getBatiment_nom()."';";
            
            $this->db->query($query);
           
        }
        catch(PDOException $e) {
            return new Message("Loge non modifiée: ".$e->getMessage());
        }
        return $uneLogeAModifier;
    }
    
    /**
     * Methode permettant de supprimer une loge
     * @param uneLoge Loge à supprimer
     * @param $unBatiment Batiment dont la Loge fait partie
     * @return Message  
     */
    public function supprimer($uneLogeASupprimer, $unBatiment) {
        try{
        $query = "DELETE FROM loge WHERE nom = '".$uneLogeASupprimer."' AND batiment_nom = '".$unBatiment."';";
                   
            $this->db->exec($query);
            $message = new Message("Loge supprimée");
        }
        catch(PDOException $e){
            $message = new Message("Loge non supprimée: ".$e->getMessage());
        }
        return $message;
    }
    
     /**
     * @param uneLoge Loge de recherche sous forme d'objet Loge
     * @return un tableau d'objet Loge
     */
    public function lister($logeALister){
        try {
            $query = "SELECT * FROM loge ";
            $query_Where="WHERE";
            if ($logeALister != NULL) {
                if ($logeALister->getNom() != NULL) {
                    $query_Where .= " nom = '".$logeALister->getNom()."' AND ";
                }
                if ($logeALister->getEstInterieure() != NULL) {
                    $query_Where .= " estInterieure = '".$logeALister->getEstInterieure()."' AND ";
                }
                if ($logeALister->getBatiment_nom() != NULL) {
                    $query_Where .= " batiment_nom = '".$logeALister->getBatiment_nom()."' AND ";
                }
            }
        
            $query_Where = substr($query_Where,0,-5);
            $query .= $query_Where;
            
            $lesLogesTrouves = null;
            $uneLogeLu = null;
            $result=$this->db->query($query);
            
            while($row=$result->fetch()) {
                $uneLogeLu = new Loge($row["nom"], $row["estInterieure"], $row["batiment_nom"]);
                $lesLogesTrouves[] = $uneLogeLu;
            }

        }
        catch(PDOException $e) {
            print($e->getMessage());
        }
        return $lesLogesTrouves;
    }
    
} 
?>
